Описание метода наискорейшего спуска
http://sumdu.edu.ua/cources/mo/rus/m_nspus.html

http://sumdu.edu.ua/cources/mo/rus/m_nspus.html
В методе наискорейшего спуска желательно использовать рассмотренное свойство направления градиента. Поэтому, если мы находимся в точке хi на некотором шаге процесса оптимизации, то поиск минимума функции осуществляется вдоль направления - . Данный метод является итерационным. На шаге i точка минимума аппроксимируется точкой хi . Следующей аппроксимацией является точка

xi+1=xi - li,(3.17)

где li - значение l, минимизирующее функцию

j (li)=f[xi- l].(3.18)

Значение li может быть найдено с помощью одного из методов одномерного поиска (например, методом квадратичной интерполяции).

В приложении приведена программа, позволяющая реализовать метод наискорейшего спуска. В ней множитель Лагранжа обозначен через h. Вектор di является единичным.

Для поиска минимума функции

j( l)=f(xi- ldi) (3.19)

в направлении di из точки xi используется метод квадратичной интерполяции.

В точке xil= 0, и мы выбираем длину шага l такой, чтобы шаг "перекрыл " минимум функции j(l) . Производная

= g(xi-ldi)Tdi(3.20)

Данный оператор for(i=0;i<n;i++) g2+=g[i]*d[i]; - вычисляет выражение

f(x0-hdi)Td=g(x0-hdi)Td (3.21)

Оператор if (ff[2]>=ff[0] || g2>=0) проверяет условие "перекрытия" минимума, которое выполняется при выполнении либо одного, либо другого условия. Если минимум не попал в отрезок (0,l), то l удваивается, и это повторяется столько раз, сколько необходимо для выполнения условия "перекрытия".

Удостоверившись, что отрезок (0,l) содержит минимум, в качестве третьей точки возьмем точку l/ 2. Минимальную точку сглаживающего квадратичного полинома находим в соответствии с соотношением

, (3.22)

что отражено следующими операторами

l[3]=h*(ff[1]-.75*ff[0]-.25*ff[2]);

l[3]/=2*ff[1]-ff[0]-ff[2];

Оператор for(i=0;i<n;i++)

производит присваивание xi+1=xi, и если |g(xi+1)| достаточно мало, то процесс заканчивается. В процессе поиска предполагается сходимость к экстремуму, поэтому для эффективности процедуры разумно уменьшить длину шага. При этом деление шага пополам выбрано произвольно.